Функции информации об ошибках

Возвращает значение переменой ldbf_errno.

Синтаксис:

char *ldbfErr_Text(int error_code)

Возвращает описание ошибки, соответсвующей коду ошибки error_code.

Функции работы с полями

Синтаксис:

ldbfFIELD *ldbfField(ldbfDB *data,char *field_name)

Возвращает указатель на структуру ldbfFIELD по имени поля, с помощью которого можно ссылаться на поле текущей записи. Данный указатель в дальнейшем может быть использован в функциях оперирующих со значениями полей. Если поле не надено, возвращает 0.

Пример:

ldbfFIELD *fld;

fld = ldbfField(data,"name");

ldbfAssign(fld,"John");

См. также: ldbfField_number(), ldbfField_j(), ldbfStr(),ldbfPtr() ldbfAssign(), ldbfAssign_long(),ldbfAssign_double()

Синтаксис:

ldbfFIELD *ldbfField_j(ldbfDB *data,int j_field)

Возвращает указатель на структуру ldbfFIELD по номеру поля. 'j_field' должен быть в диапазоне от 1 до количества полей в таблице. Если поле не найдено, возвращает 0.

См. также:ldbfField_number(), ldbfField()

Синтаксис:

int ldbfField_number(ldbfDB *data,char *name)

Возвращает порядковый номер поляпо его имени или -1, если поле не найдено.

Пример:

ldbfDB *data;

ldbfFIELD *field;

int j, i;

data = ldbfOpen( sock, "TEST.DBF" ) ;

for(j = 1; data->n_fields ; j++) {

field = ldbfField_j( data, j);

i = ldbfField_number( data, ldbfName(field) );

}

См. также:ldbfField(), ldbfField_j()

Данные функции работают со значениями полей записи,расположенной в локальном буфере. Изменения посылаются на сервер только функциями работы с записями, такими как ldbfAppend(),

ldbfUpdate(), ldbfDelete(). Данные же функции только меняютсодержимое локального буфера, а также упрощают доступ к полям записи. Поле таблицы описывается структурой ldbfFIELD. Все функции работы с полями оперируют данной структурой. Там описаны параметры поля: тип, длина, имя, а также указатель на положение поля в буфере записи.

Синтаксис:

void ldbfAssign_field( ldbfFIELD *field_to, ldbfFIELD *field_from)

Содержимое поля 'field_from' назначается полю 'field_to'. Проверка на тип и преобразование производится автоматически.

См. также:ldbfAssign(), ldbfAssign_long()

Синтаксис:

void ldbfAssign(ldbfFIELD *field,char *ptr)

Назначает полю 'field'текстовое значение из переменной 'ptr'. Если значение в 'ptr' меньше чем длина поля, оставшаяся часть заполняется пробелами,если больше - обрезается до длины поля. Если поле типа Date, то значение в 'ptr' должно быть в формате, установленном функцией ldbfSetDateFormat().

Пример:

      ldbfFIELD *name,*birth; 
      ldbfDB *data; 
      data  =  ldbfOpen( sock, "PEOPLE" ) ; 
      name = ldbfField( data, "NAME" ) ; 
      birth = ldbfField( data, "BIRTH" ) ; 
      ldbfGo( data, 1 ) ; 
      ldbfBlank( name );     /* делаем поле  "NAME" пустым */ 
      ldbfAssign( birth, "19601012" );  /* Назначаем дату */ 
      ldbfUpdate(data);      /* Шлем на сервер изменненую запись */ 
      ldbfGo( data, 2 ) ; 
      ldbfAssign( name, "AL" ) ; 
      ldbfUpdate(data); 

Синтаксис:

void ldbfAssign_char(ldbfFIELD *field,char chr)

Записывает символ 'chr' в поле 'field'.

Пример:

ldbfDB *people;

ldbfFIELD *is_male,*sex;

long rec_no;

people = ldbfOpen( sock, "PEOPLE" ) ;

is_male = ldbfField( people, "IS_MALE") ;

sex = ldbfField( people, "SEX" ) ;

for(rec_no = 1;rec_no < people->reccount;rec_no++){

ldbfGo( people, rec_no ) ;

if( ldbfChar(is_male) != 'T' ) then

ldbfAssign_char( sex, "M" )

else

ldbfAssign_char( sex, "F" )

ldbfUpdate(people);

}

См. также:ldbfChar()

Синтаксис:

void ldbfAssign_double(ldbfFIELD *field,double value)

Заменяет содержимое поля числом с плавающей точкой, содержащимся в 'value'. Значение выравнивается по правому краю.

Синтаксис:

void ldbfAssign_long(ldbfFIELD *field,long value)

Заменяет содержимое поля длинным целым , содержащимся в 'value'. Значение выравнивается по правому краю.

Пример:

void add_record( ldbfDB *invoice_dbf )

{

ldbfFIELD *invoice_no;

long new_invoice_no;

invoice_no = ldbfField( invoice_dbf, "INVOICE_NO") ;

ldbfGo( invoice_dbf, ldbfReccount(invoice_dbf) ) ;

new_invoice_no = ldbfLong(invoice_no) + 1 ;

ldbfAssign_long( invoice_no, new_invoice_no ) ;

ldbfAppend( invoice_dbf ) ;

}

Синтаксис:

char ldbfChar(ldbfFIELD *field)

Возвращает первый символ поля 'field'.

См. также:ldbfAssign_char()

Синтаксис:

int ldbfDecimals(ldbfFIELD *field)

Возвращает значение поля 'dec' структуры ldbfFIELD. Определяет количество знаков после запятой в значении данного поля.

Пример:

void display_structure( ldbfDB *data )

int j;

ldbfFIELD *field;

printf( " NAME TYPE WIDTH DECIMALS\n") ;

for( j = 1;j <= data->n_fields;j++){

field = ldbfField_j( data, j ) ;

printf("%s %c %d %d\n",ldbfName(field),(char)ldbfType(field),

ldbfLen(field),ldbfDecimals(field))

}

Синтаксис:

double ldbfDouble(ldbfFIELD *field)

Возвращает значение поля как число с плавающей точкой.

Синтаксис:

int ldbfLen(ldbfFIELD *field)

Возвращает длину поля.

Синтаксис:

long ldbfLong(ldbfFIELD *field)

Возвращает значение поля как длинное целое. Если поле типа Data, возвращается значение даты.

Синтаксис:

char *ldbfName(ldbfFIELD *field)

Возвращает имя поля.

Синтаксис:

char *ldbfPtr(ldbfFIELD *field)

Возвращает указатель на начало поля в буфере записи.

Синтаксис:

char *ldbfStr(ldbfFIELD *field)

Возвращает значение поля как строку. Указатель указывает на внутренний статический буфер, последующее обращение к данной функции затирает предыдущее. Если поле типа Date, то результат возвращается в формате, установленном функцией ldbfSetDateFormat().

Пример:

Неверно:

printf( "Поле 1 %s Поле 2 %s",

ldbfStr( ldbfField_j(data,1)),

ldbfStr( ldbffField_j(data,2)));

Правильно:

void display_fields( ldbfFIELD *field1,ldbfFIELD *field2)

{

printf( " Поле 1: "ldbfStr( field1 ) ) ;

printf( " Поле 2: ",ldbfStr( field2 ) );

}

Синтаксис:

int ldbfType(ldbfFIELD *field)

Возвращает тип поля:

Синтаксис:

char *ldbfValue( char *alias,char *field_name )

Аналогична ldbfStr(), но обращается к таблице и полю по их именам. Возвращает значение поля в виде строки. Таблица должна быть открыта.

См. также:ldbfStr()

Пример:

data = ldbfOpen(sock,"data");

printf("%s%s\n",ldbfValue("data","name"),ldbfValue("data", "address"));

Синтаксис:

long ldbfLongValue( char *alias,char *field_name)

Аналогична ldbfLong, но обращается к таблице и полю по их именам. Возвращает значение поля в виде числа. Таблица должна быть открыта.

Пример:

data = ldbfOpen(sock,"data");

printf("%ld\n",ldbfLongValue("data","zip"));

См. также:ldbfLong()

Синтаксис:

double ldbfDoubleValue( char *alias,char *field_name)

Аналогична ldbfDouble(),но обращается к таблице и полю по их именам. Возвращает значение поля в виде числа c плавающей точкой.Таблица должна быть открыта.

Пример:

data = ldbfOpen(sock,"data");

printf("%f\n",ldbfDoubleValue("data","money"));

См. также: ldbfDouble()

Синтаксис:

char *ldbfMemoValue(ldbfDB *data,char *field_name,int *memo_len)

Возвращает указатель на содержимое мемо поля 'field_name'. В переменную 'memo_len' будет помещена длина мемо поля. Значение должно быть переписано в локальный буфер, так как при следующем обращением к серверу содержание мемо поля будет затерто.

Пример:

int memo_len;

data = ldbfOpen(sock,"data");

printf("contents of memo:%s\n",

ldbfMemoValue(data,"memo",&memo_len));

printf("size of memo:%ld\n",memo_len);

См. также:ldbfReplaceMemo()

Синтаксис:

int ldbfReplaceMemo(ldbfDB *data,char *field_name,char *buffer,

int len)

Заменяет содержимое мемо поля 'field_name' на содержимое буфера 'buffer'. 'len' содержит длину буфера.

Пример:

int memo_len;

char buffer[20] = "memo buffer";

ldbfReplaceMemo(data,"memo",buffer,strlen(buffer));

См. также:ldbfMemoValue()

Синтаксис:

void ldbfReplace(char *alias,char *field_name,char *value)

Аналогична функции ldbfAssign(), но ссылка на таблицу и поле ведется с помощью их имен. Таблица должна быть открыта. Если поле типа Date, то значение в 'value' должно быть в формате, установленном функцией ldbfSetDateFormat().

Пример:

data = ldbfOpen(sock,"data");

ldbfReplace("data","name","Scott Black");

См. также:ldbfAssign()

Синтаксис:

void ldbfReplaceLong(char *alias,char *field_name,long value)

Аналогична функции ldbfAssign_long, но ссылка на таблицу и поле ведется с помощью их имен. Таблица должна быть открыта.

Пример:

data = ldbfOpen(sock,"data");

ldbfReplaceLong("data","zip",12345);

См. также:ldbfAssign_long()

Конвертирует длинное целое в строку. 'num' - максимальная


Синтаксис:

void ldbfReplaceDouble(char *alias,char *field_name,double value)

Аналогична функции ldbfAssignDouble, но ссылка на таблицу и поле ведется с помощью их имен. Таблица должна быть открыта.

Пример:

data = ldbfOpen(sock,"data");

ldbfReplaceDouble("data","money",100.25);

См. также:ldbfAssign_double()

Вспомогательные функции

Синтаксис:

char *trim(char *s)

Удаляет из строки все лидирующие и хвостовые пробелы.

Синтаксис:

int wordcnt(char *s,char *delim)

Возвращает количество слов в 's', разделенные набором символов 'delim'.

Пример:

char s[10] = "10,24.45";

wordcnt(s,",."); /* возвращает 3 */

Синтаксис:

int wordpos(int n, char *s,char *delim)

Возвращает номер позициц 'n'-го слова в 's', разделенного символами из 'delim'.

См. также:wordcnt(),getword()

Синтаксис:

char *getword(int n,char *s,char *delim,char *buf)

Записывает в 'buf' 'n'-е слово из 's', используя символы из 'delim' как разделители.

Пример:

char buf[10],s[10] = "10,12,25";

int i,cnt = wordcnt(s,",");

if(cnt > 0)

for(i = 1; i <= cnt;i++)

printf("%s\n",getword(i,s,",",buf);

Синтаксис:

double ldbfatod( char *str, int len_str );

int ldbfatoi( char *str, int len_str );

long ldbfatol( char *str, int len_str );

ldbfatod() конвертирует строку в число с плавающей точкой,

ldbfatoi() конвертирует строку в целое,

ldbfatol() конвертирует строку в длинное целое.

Синтаксис:

void ldbfdtoa( double doub_val, char *out_buffer, int len, int dec)

Конвертирует число с плавающей точкой 'doub_val' в строку out_buffer,

где:

Синтаксис:

void ldbfltoa( long l_val, char *ptr, int num)

длина строки. Если 'num' меньше нуля, заполнениепроизводится '0', вместо пробела.

Синтаксис:

void ldbflower( char *str )
void ldbflowerKOI( char *str )
void ldbflowerWIN( char *str )

Переводит все символы в строке в нижний регистр.
KOI означает кодировку KOI-8,WIN - кодировка Windows,по умолчанию используется руская раскладка 866.

Синтаксис:

void ldbfupper( char *str )
void ldbfupperKOI( char *str )
void ldbfupperWIN( char *str )

Переводит все символы в строке в верхний регистр.
KOI означает кодировку KOI-8,WIN - кодировка Windows,по умолчанию используется руская раскладка 866.

Синтаксис:

void ldbfkoi2alt( char *str )
void ldbfalt2koi( char *str )

Переводит все символы в строке в из кодировки KOI-8 в алтернативную(ldbfkoi2alt) и наоборот (ldbfalt2koi).

Синтаксис:

void ldbfkoi2win( char *str )
void ldbfwin2koi( char *str )

Переводит все символы в строке в из кодировки KOI-8 в Windows(ldbfkoi2win) и наоборот (ldbfwin2koi).

Функции работы со списком

Идея списка состоит в следующем. Cтруктура, которая должна быть использована как элемент списка, своим первым элементом содержит структуру типа 'link_list'. Данная структура состоит из указателя на предыдущий и следующий элементы. Функции работы с элементами списка используют только эту первую структуру,не обращая внимания на остальную часть. Таким образом, любую структуру можно использовать как элемент списка при условии, что первым элементом такой структуры будет переменная типа 'link_list'.

Синтаксис:

void *list_first(ldbfList *lst)

Возвращает указатель на первый элемент списка.

Пример:

typedef struct {

link_list link;

char name[30];

} name_item;

name_item *item;

ldbfList list;

memset(&list,0,sizeof(list));

item = (name_item*)calloc(1,sizeof(name_item));

strcpy(item->name,"Bill");

list_add(&list,item);

strcpy(item->name,"John");

list_add(&list,item);

/* показываем содержимое списка */

for(item = (name_item*)list_first(&list);item;

item = (name_item*)list_next(&list,item))

printf("%s\n",item->name);

Синтаксис:

void * list_last(ldbfList *lst)

Возвращает указатель на последний элемент списка.

Пример:

for(item = (name_item*)list_last(&list);item;

item = (name_item*)list_prev(&list,item))

printf("%s\n",item->name);

Синтаксис:

void * list_next(ldbfList *lst,void *link)

Возвращает указатель на элемент списка, следующий за элементом 'link'.

Смотрите пример для функции list_first().

Синтаксис:

void *list_prev(ldbfList *lst,void *link)

Возвращает указатель на элемент списка,стоящий перед элементом 'link'.

Смотрите пример для функции list_first().

Синтаксис:

void list_remove(ldbfList *lst,void *link)

Удаляет элемент 'link' из списка. Память, занимаемая элементом, не освобождается.

Синтаксис:

void list_add(ldbfList *lst,void *link);

void list_add_after(ldbfList *lst,void *anchor,void *link);

void list_add_before(ldbfList *lst,void *anchor,void *link);

Эти функции добавляют в список новый элемент.

Синтаксис:

void *list_pop(ldbfList *lst)

Удаляет первый элемент из списка.Удобна для удаления всех элементов.

Пример:

while((item = (name_item*)list_pop(&list)) {

...

free(item);

}

Возвращает дату в формате CCYYMMDD, которая берется из переменной 'value'. Эта переменная содержит дату в формате, представленном переменной 'picture'. При обработке дат в программе и если они хранятся в формате, отличном от CCYYMMDD, необходимо их конвертировать данной функцией